home *** CD-ROM | disk | FTP | other *** search
- {
- Here is a routine I used. It forces entry of a proper filename,
- not quite what you're looking for, but close:
- }
-
- uses
- Crt;
-
- const
- OKFNameChars = ['A'..'Z','a'..'z','0'..'9','$','%','''',
- '-','@','{','}','~','`','!','#','(',')','&'];
-
- procedure Backspace;
- begin
- gotoxy(wherex-1,1);write(' ');gotoxy(wherex-1,1);
- end;
-
- function GetFileName(Prompt : string) : string;
- var
- OKCharSet : set of char;
- ch : char;
- Done : boolean;
- Name : string;
- len : byte absolute Name;
- begin
- OKCharSet := OKFNameChars + ['.',#8,#13,#27];
- write(Prompt);
- Done := false;
- Name := '';
- repeat
- repeat
- ch := upcase(readkey);
- until (ch in OKCharSet);
- case ch of
- #8 : if len > 0 then begin
- Backspace;
- dec(len);
- end;
- #13 : Done := true;
- #27 : begin
- while len > 0 do begin
- Backspace;
- dec(len);
- end;
- Done := true;
- end;
- '.' : if (len > 0)
- and (pos('.',Name) = 0) then begin
- write('.');
- Name := Name + '.';
- end;
- else if ((pos('.',Name) = 0) and (len < 8))
- or (len - pos('.',Name) < 3) then begin
- Name := Name + ch;
- write(ch);
- end;
- end; { case }
- until Done;
- writeln;
- GetFileName := Name;
- end;
-
- { test follows }
- var
- fname : string;
-
- begin
- clrscr;
- repeat
- fname := GetFileName('Enter file name: ');
- until fname = '';
- end.